﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using Npgsql;
using NpgsqlTypes;
/// <summary>
/// Descripción breve de Conexion
/// </summary>
public class Conexion
{
    String conectionString = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
    NpgsqlConnection conexion;
    String sentenciaSQL;
    NpgsqlTransaction transaccion;
    NpgsqlCommand command;
    NpgsqlDataAdapter da;


    //Crea la conexion
    public Conexion()
    {
        conexion = new NpgsqlConnection(this.conectionString);
    }

    public NpgsqlConnection getConexion()
    {
        return conexion;
    }

    //Abre la conexion
    public void AbrirConexion()
    {

        try
        {
            conexion.Open();
        }
        catch (Exception ex)
        {
            throw new ConexionException("no se pudo abrir la conexion", ex);
        }

    }


    //Cierra la conexion
    public void CerrarConexion()
    {
        String con = conexion.State.ToString();
        if (conexion.State.ToString() == "Open")
        {
            try
            {
                conexion.Close();
            }
            catch (Exception ex)
            {
                throw new ConexionException("no se pudo cerrar la conexion", ex);
            }
        }
    }

    //Setea o Obtiene el valor de la sentencia sql
    public String SentenciaSQL
    {
        get { return this.sentenciaSQL; }
        set { this.sentenciaSQL = value; }
    }

    //Inicia la transaccion
    public void IniciarTransaccion()
    {
        this.transaccion = conexion.BeginTransaction();
    }

    //Confirma la transaccion
    public void ConfirmarTransaccion()
    {
        this.transaccion.Commit();
    }

    //Cancela la transaccion
    public void CancelarTransaccion()
    {
        this.transaccion.Rollback();
    }


    //ejecuta la sentencia sql
    public void EjecutarComando()
    {

        try
        {
            this.command = new NpgsqlCommand(this.sentenciaSQL, this.conexion);
            command.ExecuteNonQuery();
        }

        catch
        {
            throw new ConexionException("error al ejecutar el comando sql");
        }

    }
    
    //ejecuta la sentencia sql y retorna en un DataSet el resultado de la consulta
    public DataSet EjecutarComandoDataSet()
    {
        DataSet ds = new DataSet();
        try
        {
            this.command = new NpgsqlCommand(this.sentenciaSQL, this.conexion);
            da = new NpgsqlDataAdapter(this.command);
            da.Fill(ds);
        }

        catch
        {
            throw new ConexionException("error al ejecutar el comando sql");
        }
        return ds;
    }


   


}
